/******************************************************************************
* 文件名称: irq.h
* 内容摘要: 中断请求头文件
* 创建者の: 孔佳伟
* 个人主页: https://gitee.com/thin-wind/jump
* 修改记录: 
******************************************************************************/

#ifndef __IRQ_H_
#define __IRQ_H_

#ifdef __cplusplus
extern "C" {
#endif

#include <common.h>

// 中断号枚举
typedef enum E_IRQ_NUM
{
    IRQ0,   IRQ1,   IRQ2,   IRQ3,   IRQ4,   IRQ5,   IRQ6,   IRQ7,   IRQ8,   IRQ9,   IRQ10,  IRQ11,  IRQ12,  IRQ13,  IRQ14,  IRQ15,  //   0 ~ 15
    IRQ16,  IRQ17,  IRQ18,  IRQ19,  IRQ20,  IRQ21,  IRQ22,  IRQ23,  IRQ24,  IRQ25,  IRQ26,  IRQ27,  IRQ28,  IRQ29,  IRQ30,  IRQ31,  //  16 ~ 31
    IRQ32,  IRQ33,  IRQ34,  IRQ35,  IRQ36,  IRQ37,  IRQ38,  IRQ39,  IRQ40,  IRQ41,  IRQ42,  IRQ43,  IRQ44,  IRQ45,  IRQ46,  IRQ47,  //  32 ~ 47
    IRQ48,  IRQ49,  IRQ50,  IRQ51,  IRQ52,  IRQ53,  IRQ54,  IRQ55,  IRQ56,  IRQ57,  IRQ58,  IRQ59,  IRQ60,  IRQ61,  IRQ62,  IRQ63,  //  48 ~ 63
    IRQ64,  IRQ65,  IRQ66,  IRQ67,  IRQ68,  IRQ69,  IRQ70,  IRQ71,  IRQ72,  IRQ73,  IRQ74,  IRQ75,  IRQ76,  IRQ77,  IRQ78,  IRQ79,  //  64 ~ 79
    IRQ80,  IRQ81,  IRQ82,  IRQ83,  IRQ84,  IRQ85,  IRQ86,  IRQ87,  IRQ88,  IRQ89,  IRQ90,  IRQ91,  IRQ92,  IRQ93,  IRQ94,  IRQ95,  //  80 ~ 95
    IRQ96,  IRQ97,  IRQ98,  IRQ99,  IRQ100, IRQ101, IRQ102, IRQ103, IRQ104, IRQ105, IRQ106, IRQ107, IRQ108, IRQ109, IRQ110, IRQ111, //  96 ~ 111
    IRQ112, IRQ113, IRQ114, IRQ115, IRQ116, IRQ117, IRQ118, IRQ119, IRQ120, IRQ121, IRQ122, IRQ123, IRQ124, IRQ125, IRQ126, IRQ127, // 112 ~ 127
    IRQ128, IRQ129, IRQ130, IRQ131, IRQ132, IRQ133, IRQ134, IRQ135, IRQ136, IRQ137, IRQ138, IRQ139, IRQ140, IRQ141, IRQ142, IRQ143, // 128 ~ 143
    IRQ144, IRQ145, IRQ146, IRQ147, IRQ148, IRQ149, IRQ150, IRQ151, IRQ152, IRQ153, IRQ154, IRQ155, IRQ156, IRQ157, IRQ158, IRQ159, // 144 ~ 159
    IRQ160, IRQ161, IRQ162, IRQ163, IRQ164, IRQ165, IRQ166, IRQ167, IRQ168, IRQ169, IRQ170, IRQ171, IRQ172, IRQ173, IRQ174, IRQ175, // 160 ~ 175
    IRQ176, IRQ177, IRQ178, IRQ179, IRQ180, IRQ181, IRQ182, IRQ183, IRQ184, IRQ185, IRQ186, IRQ187, IRQ188, IRQ189, IRQ190, IRQ191, // 176 ~ 191
    IRQ192, IRQ193, IRQ194, IRQ195, IRQ196, IRQ197, IRQ198, IRQ199, IRQ200, IRQ201, IRQ202, IRQ203, IRQ204, IRQ205, IRQ206, IRQ207, // 192 ~ 207
    IRQ208, IRQ209, IRQ210, IRQ211, IRQ212, IRQ213, IRQ214, IRQ215, IRQ216, IRQ217, IRQ218, IRQ219, IRQ220, IRQ221, IRQ222, IRQ223, // 208 ~ 223
    IRQ224, IRQ225, IRQ226, IRQ227, IRQ228, IRQ229, IRQ230, IRQ231, IRQ232, IRQ233, IRQ234, IRQ235, IRQ236, IRQ237, IRQ238, IRQ239, // 224 ~ 239
    IRQ240, IRQ241, IRQ242, IRQ243, IRQ244, IRQ245, IRQ246, IRQ247, IRQ248, IRQ249, IRQ250, IRQ251, IRQ252, IRQ253, IRQ254, IRQ255, // 240 ~ 255
    IRQ_TOTAL
} E_IRQ_NUM;


typedef void (*F_ISR)(void);

/******************************************************************************
* 函数名称: IrqRegister(E_IRQ_NUM irqNmu, F_ISR ifunc)
* 功能说明: 注册中断服务程序
* 输入参数: E_IRQ_NUM irqNmu	--中断号
    　　　　F_ISR ifunc	        --中断服务程序
* 输出参数: 无
* 函数返回: E_OK:成功; E_ERR:失败
* 其它说明: 无
******************************************************************************/
E_RET IrqRegister(E_IRQ_NUM irqNmu, F_ISR ifunc);

/******************************************************************************
* 函数名称: IrqInit(void)
* 功能说明: 将中断服务程序入口注册到 IDT 中
* 输入参数: 无
* 输出参数: 无
* 函数返回: E_OK:成功; E_ERR:失败
* 其它说明: 中断服务程序入口见 interrupt.asm
******************************************************************************/
E_RET IrqInit(void);


#ifdef __cplusplus
}
#endif

#endif

